package gef.tutorial.step.action;


import org.eclipse.core.runtime.Path;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;

import gef.tutorial.step.app.Activator;
import gef.tutorial.step.constant.IImageConstant;
import gef.tutorial.step.ui.editor.DiagramEditor;
import gef.tutorial.step.ui.editor.input.DiagramEditorInput;

/**
 * DiagramAction
 * 
 * @author shirayner
 *
 */
public class DiagramAction extends Action {
	private final IWorkbenchWindow window;
	public final static String ID = "gef.tutorial.step.action.DiagramAction";

	/**
	 * 一、在构造方法中设置基本属性
	 * 
	 * @param window
	 */
	public DiagramAction(IWorkbenchWindow window) {
		this.window = window;

		//1.定义该Action的ID.  每一个Action需要一个唯一的ID号
		setId(ID);

		//2.设置该Action的文字。该文字也就是菜单上的文字。"@ALT+D"用来设置该Action的快捷键
		setText("&Diagram@ALT+D");

		//3.设置工具栏的提示文本
		setToolTipText("Draw the GEF diagram.");

		//4.设置该Action的图片。该方法使用 AbstractUIPlugin 抽象类的 imageDescriptorFromPlugin() 方法快捷地获取图像。
		//imageDescriptorFromPlugin()方法需要两个参数：项目ID、图片文件名。
		setImageDescriptor(Activator.imageDescriptorFromPlugin( Activator.PLUGIN_ID, IImageConstant.EDITORTITLE));

	}




	/**
	 * 二、在Run方法中设置要执行的动作。
	 * 单击菜单、工具栏图标按钮或者按键时会执行Action的run方法
	 * 
	 */
	@Override
	public void run() {
		//1.打开文本对话框后，获取文件路径
		String path = openFileDialog();
		if (path != null) {
			//弹出一个对话框
			//MessageDialog.openInformation(window.getShell(), "温馨提示", "文件保存路径为："+path);

			//2.根据文件路径，创建一个编辑器输入
			IEditorInput input = new DiagramEditorInput(new Path(path));

			//3.获取工作台页面
			IWorkbenchPage page = window.getActivePage();

			try{
				//4.根据扩展点ID打开编辑器.
				page.openEditor(input, DiagramEditor.ID,true);

			}catch(Exception e){
				System.err.println(e);
			}

		}

	}


	/** 打开一个文件对话框
	 * 
	 * @return
	 *   String  文件路径
	 */
	private String openFileDialog(){
		FileDialog dialog = new FileDialog(window.getShell(),SWT.OPEN);
		dialog.setText("文件保存到");
		dialog.setFilterExtensions(new String[] { ".diagram" });
		return dialog.open();
	}



}
